package Model;

import Enum.TipoOperacao;

public class Operacao {
	public static void main(String[] args) {
		// Operacao op = new Operacao(1, new Objeto(TipoObjeto.BANCO_DE_DADOS,
		// 1),TipoOperacao.ESCRITA, 1);
		Operacao op = new Operacao(3, null, TipoOperacao.COMMIT, 1);
		System.out.println(op.toString());
		System.out.println(op.toStringTS());
	}

	private Objeto objeto;

	private int timestamp;

	private TipoOperacao tipo;

	private int idTransacao;

	public Operacao(int uid, Objeto objeto, TipoOperacao tipo) {
		this.idTransacao = uid;
		this.objeto = objeto;
		this.tipo = tipo;
	}

	public Operacao(int uid, Objeto string, TipoOperacao tipo, int timestamp) {
		this.idTransacao = uid;
		this.objeto = string;
		this.tipo = tipo;
		this.timestamp = timestamp;
	}

	public Operacao(int uid, TipoOperacao tipo) {
		this.idTransacao = uid;
		this.tipo = tipo;
	}

	public Objeto getObjeto() {
		return objeto;
	}

	public int getTimestamp() {
		return timestamp;
	}

	public TipoOperacao getTipo() {
		return tipo;
	}

	public int getTid() {
		return idTransacao;
	}

	public void setObjeto(Objeto objeto) {
		this.objeto = objeto;
	}

	public void setTimestamp(int timestamp) {
		this.timestamp = timestamp;
	}

	public void setTipo(TipoOperacao tipo) {
		this.tipo = tipo;
	}

	public void setTid(int uid) {
		this.idTransacao = uid;
	}

	@Override
	public String toString() {
		StringBuilder s = new StringBuilder();
		switch (tipo) {
		case ESCRITA:
			s.append("W");
			s.append(idTransacao);
			s.append("(");
			s.append(objeto);
			s.append(")");
			break;
		case LEITURA:
			s.append("R");
			s.append(idTransacao);
			s.append("(");
			s.append(objeto);
			s.append(")");
			break;
		case COMMIT:
			s.append("C");
			s.append(idTransacao);
			break;
		case BLOQUEIO_ESCRITA:
			s.append("WL");
			s.append(idTransacao);
			s.append("(");
			s.append(objeto);
			s.append(")");
			break;
		case BLOQUEIO_LEITURA:
			s.append("RL");
			s.append(idTransacao);
			s.append("(");
			s.append(objeto);
			s.append(")");
			break;
		default:
			break;
		}
		return s.toString();
	}

	public String toStringTS() {
		StringBuilder s = new StringBuilder();
		s.append(toString());
		s.append("[TS:");
		s.append(timestamp);
		s.append("]");
		return s.toString();
	}
}
